package com.autoEcole.service;

import java.text.ParseException;
import java.util.List;
import java.util.Map;

import com.autoEcole.dao.FonctionDAO;
import com.autoEcole.exception.ApplicationException;
import com.autoEcole.exception.DAOException;
import com.autoEcole.model.Fonction;

public class FonctionService {
	
	private FonctionDAO fonctionDAO;
	/**
	 * FonctionService
	 */
	private static FonctionService fonctionService;
	
	/**
	 * Constructor
	 */
	private FonctionService() {
		super();
	}

	/**
	 * Returns the FonctionService instance (Design Pattern : Singleton)
	 * 
	 * @return FonctionService
	 */
	public static synchronized FonctionService getInstance() {
		if (fonctionService == null)
			fonctionService = new FonctionService();
		return fonctionService;
	}

	public FonctionDAO getFonctionDAO() {
		return fonctionDAO;
	}

	public void setFonctionDAO(FonctionDAO fonctionDAO) {
		this.fonctionDAO = fonctionDAO;
	}

	public int create(Fonction fonction) throws ApplicationException {
		try {
			return fonctionDAO.create(fonction);
		} catch (DAOException ex) {
			throw new ApplicationException(ex);
		}
	}

	/**
	 * 
	 */
	public void update(Fonction fonction) throws ApplicationException {
		try {
			fonctionDAO.update(fonction);
		} catch (DAOException ex) {
			throw new ApplicationException(ex);
		}
	}

	/**
	 * retourne l'element si il existe ou null
	 */
	public Fonction findById(int id) throws ApplicationException {
		try {
			return fonctionDAO.findById(id);
		} catch (DAOException ex) {
			throw new ApplicationException(ex);
		}
	}

	/**
	 * @throws ParseException 
	 * 
	 */
	public List<Fonction> findAll() throws ApplicationException, ParseException {
		try {
			return fonctionDAO.findAll();
		} catch (DAOException ex) {
			throw new ApplicationException(ex);
		}		
	}
	
	/**
	 * 
	 */
	public Map<Integer , Fonction> findAllMap() throws ApplicationException {
		try {
			return fonctionDAO.findAllMap();
		} catch (DAOException ex) {
			throw new ApplicationException(ex);
		}
	}
	
	/**
	 * 
	 */	
	public void delete(int fonctionId) throws ApplicationException {
		try {
			fonctionDAO.delete(fonctionId);
		} catch (DAOException ex) {
			throw new ApplicationException(ex);
		}		
	}
}
